package cn.iocoder.yudao.module.bpm.service.definition;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmCommonCreateRespDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmCommonHandleDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmCommonHandlePageDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmCommonHandleTotalDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.common.BpmCommonHandleVO;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.common.BpmHandleStatisticsRespVO;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * 流程公共服务
 */
public interface BpmCommonService {

  /**
   * 创建流程实例
   * @param busId
   * @param key
   * @param variables
   * @return
   */
  public BpmCommonCreateRespDTO createProcessInstance(String busId ,String key , Map<String, Object> variables) ;

  /**
   * 提交流程
   * @param processInstanceId
   * @param reason
   * @param variables
   */
  public BpmCommonCreateRespDTO completeTask(String processInstanceId, String reason, Map<String,Object> variables) ;

  /**
   * 创建流程并提交
   * @param busId
   * @param reason
   * @param key
   * @param variables
   * @return
   */
  public BpmCommonCreateRespDTO createInstanceAndCompleteTask(String busId,String reason ,String key , Map<String, Object> variables) ;


  /**
   * 查询待办分页
   * @return
   */
  public PageResult<BpmCommonHandleDTO> selectHandleFlowPage(BpmCommonHandlePageDTO pageDTO) ;

  /**
   * 查询待办分页
   * @return
   */
  public PageResult<BpmCommonHandleDTO> selectHandleDoneFlowPage(BpmCommonHandlePageDTO pageDTO) ;

  /**
   * 根据流程名称查询待办流程总数
   * @param userCode
   * @return
   */
  public List<BpmCommonHandleTotalDTO> selectHandleTotal(String userCode) ;

  /**
   * 根据流程名称查询已办流程总数
   * @param userCode
   * @return
   */
  public List<BpmCommonHandleTotalDTO> selectHandleDoneTotal(String userCode) ;

  /**
   * 查询待办统计数据
   * @Author 王铁
   * @Description TODO
   * @Date 2024/10/24 10:50
   * @Version 1.0
   */
  public List<BpmHandleStatisticsRespVO> getHandleStatistics(BpmCommonHandleVO reqVO) ;

  InputStream resourceRead(String id, String resType);
}
